package com.atguigu.aiproject.service.impl;

import com.atguigu.aiproject.mapper.CategoryMapper;
import com.atguigu.aiproject.entity.Category;
import com.atguigu.aiproject.service.CategoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 作品分类
 * 所有static方法仅能读取，不能修改
 */
@Service
public class CategoryServiceImpl extends ServiceImpl<CategoryMapper, Category> implements CategoryService {
    // 建立分类名称与ID的映射关系
    private static final Map<String, Integer> CATEGORY_NAME_TO_ID = new HashMap<>();

    // 建立分类ID与名称的映射关系（反向映射）
    private static final Map<Integer, String> CATEGORY_ID_TO_NAME = new HashMap<>();

    // 默认分类ID
    private static final int DEFAULT_CATEGORY_ID = 1;

    private final CategoryMapper categoryMapper;

    public CategoryServiceImpl(CategoryMapper categoryMapper) {
        this.categoryMapper = categoryMapper;
        List<Category> categories = categoryMapper.selectList(null);
        for (Category category : categories) {
            CATEGORY_NAME_TO_ID.put(category.getCgyName(), category.getCgyId());
            CATEGORY_ID_TO_NAME.put(category.getCgyId(), category.getCgyName());
        }
    }

    // 添加分类，仅管理员可操作
    private void addCategory(Category category) {
        CATEGORY_NAME_TO_ID.put(category.getCgyName(), category.getCgyId());
        CATEGORY_ID_TO_NAME.put(category.getCgyId(), category.getCgyName());
        throw new RuntimeException("未实现");
    }

    /**
     * 根据分类名称获取分类ID
     *
     * @param categoryName 分类名称
     * @return 分类ID，如果未找到则返回默认值1
     */
    public static int getCategoryId_s(String categoryName) {
        return CATEGORY_NAME_TO_ID.getOrDefault(categoryName, DEFAULT_CATEGORY_ID);
    }

    /**
     * 根据分类ID获取分类名称
     *
     * @param categoryId 分类ID
     * @return 分类名称，如果未找到则返回null
     */
    public static String getCategoryName_s(Integer categoryId) {
        return CATEGORY_ID_TO_NAME.get(categoryId);
    }

    /**
     * 检查分类名称是否存在
     *
     * @param categoryName 分类名称
     * @return 是否存在
     */
    public static boolean containsCategoryName_s(String categoryName) {
        return CATEGORY_NAME_TO_ID.containsKey(categoryName);
    }

    /**
     * 检查分类ID是否存在
     *
     * @param categoryId 分类ID
     * @return 是否存在
     */
    public static boolean containsCategoryId_s(Integer categoryId) {
        return CATEGORY_ID_TO_NAME.containsKey(categoryId);
    }
}
